package csm.sql.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 
 * @author seungmun
 * @since 2006.1.18.
 * @version
 * @see
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface ColumnMapping
{
	public enum NodeType
	{
		NORMAL, HASCHILD,
	};

	/**
	 * 컬럼명
	 * 
	 * @return
	 */
	String columnName();

	/**
	 * 컬럼 타입 (Types.XXX값이 들어가야 한다.)
	 * 
	 * @return
	 */
	int type();

	/**
	 * PrimaryKey여부
	 * 
	 * @return
	 */
	boolean isPk() default false;

	/**
	 * INSERT시 컬럼값 대신 이용할 퀴리
	 * 
	 * <pre>
	 * INSERT INTO foo (goo, test) VALUES ((SELECT max(goo) FROM foo), ?)
	 * 에서의 SELECT max(goo) FROM foo 부분에 해당될 쿼리
	 * </pre>
	 * 
	 * @return
	 */
	String insertQuery() default "";

	boolean isVirtual() default false;

	String nodeName() default "";

	NodeType nodeType() default NodeType.NORMAL;
}
